using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._MaritimeTools._S._57._Management
{
    /// <summary>
    /// <para>Export Geodatabase To S-57</para>
    /// <para>Exports hydrographic data from a maritime charting geodatabase to an S-57 file.</para>
    /// <para>将水文数据从海图地理数据库导出到 S-57 文件。</para>
    /// </summary>    
    [DisplayName("Export Geodatabase To S-57")]
    public class ExportGeodatabaseToS57 : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ExportGeodatabaseToS57()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_source_gdb">
        /// <para>Source Geodatabase</para>
        /// <para>The database from which the product will be exported.</para>
        /// <para>将从中导出产品的数据库。</para>
        /// </param>
        /// <param name="_product">
        /// <para>S-57 Product</para>
        /// <para>The name of the product to export. This product metadata entry must exist in the ProductDefinition table, and the related extents must be present in the ProductCoverage feature class in the workspace.</para>
        /// <para>要导出的产品的名称。此产品元数据条目必须存在于 ProductDefinition 表中，并且相关范围必须存在于工作空间的 ProductCoverage 要素类中。</para>
        /// </param>
        /// <param name="_export_type">
        /// <para>Export Type</para>
        /// <para><xdoc>
        ///   <para>Specifies the type of file to be created during the export.</para>
        ///   <bulletList>
        ///     <bullet_item>New Dataset— A new dataset including information that has not been previously distributed by updates will be created.</bullet_item><para/>
        ///     <bullet_item>New Edition— A new edition of a dataset including information that has not been previously distributed by updates will be created.</bullet_item><para/>
        ///     <bullet_item>Update— Changes in a dataset since the last export will be reflected in the file.</bullet_item><para/>
        ///     <bullet_item>Reissue— A reissue of a dataset including all the updates applied to the original dataset up to the date of reissue will be created. A reissue does not contain information that has not been previously issued by updates.</bullet_item><para/>
        ///     <bullet_item>Cancel— When a dataset is deleted, an updated cell file is created containing only the Dataset General Information record with the Dataset Identifier (DSID) field. In this case, the Edition Number (EDTN) subfield must be set to 0.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定导出过程中要创建的文件类型。</para>
        ///   <bulletList>
        ///     <bullet_item>新数据集 - 将创建一个新数据集，其中包含以前未通过更新分发的信息。</bullet_item><para/>
        ///     <bullet_item>新版本 - 将创建数据集的新版本，其中包含以前未通过更新分发的信息。</bullet_item><para/>
        ///     <bullet_item>更新— 自上次导出以来数据集中的更改将反映在文件中。</bullet_item><para/>
        ///     <bullet_item>重新发布- 将创建数据集的重新发布，包括截至重新发布日期应用于原始数据集的所有更新。重新发布不包含以前未由更新发布的信息。</bullet_item><para/>
        ///     <bullet_item>取消 - 删除数据集时，将创建一个更新的像元文件，该文件仅包含具有数据集标识符 （DSID） 字段的数据集常规信息记录。在这种情况下，版本号 （EDTN） 子字段必须设置为 0。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        /// <param name="_out_location">
        /// <para>Output Location</para>
        /// <para>The location containing the output export package.</para>
        /// <para>包含输出导出包的位置。</para>
        /// </param>
        public ExportGeodatabaseToS57(object _in_source_gdb, object _product, _export_type_value? _export_type, object _out_location)
        {
            this._in_source_gdb = _in_source_gdb;
            this._product = _product;
            this._export_type = _export_type;
            this._out_location = _out_location;
        }
        public override string ToolboxName => "Maritime Tools";

        public override string ToolName => "Export Geodatabase To S-57";

        public override string CallName => "maritime.ExportGeodatabaseToS57";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_source_gdb, _product, _export_type.GetGPValue(), _out_location, _in_product_config, _clip_data_option.GetGPValue(), _sample_export.GetGPValue(), _out_file, _in_scamin_file];

        /// <summary>
        /// <para>Source Geodatabase</para>
        /// <para>The database from which the product will be exported.</para>
        /// <para>将从中导出产品的数据库。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Source Geodatabase")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_source_gdb { get; set; }


        /// <summary>
        /// <para>S-57 Product</para>
        /// <para>The name of the product to export. This product metadata entry must exist in the ProductDefinition table, and the related extents must be present in the ProductCoverage feature class in the workspace.</para>
        /// <para>要导出的产品的名称。此产品元数据条目必须存在于 ProductDefinition 表中，并且相关范围必须存在于工作空间的 ProductCoverage 要素类中。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("S-57 Product")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _product { get; set; }


        /// <summary>
        /// <para>Export Type</para>
        /// <para><xdoc>
        ///   <para>Specifies the type of file to be created during the export.</para>
        ///   <bulletList>
        ///     <bullet_item>New Dataset— A new dataset including information that has not been previously distributed by updates will be created.</bullet_item><para/>
        ///     <bullet_item>New Edition— A new edition of a dataset including information that has not been previously distributed by updates will be created.</bullet_item><para/>
        ///     <bullet_item>Update— Changes in a dataset since the last export will be reflected in the file.</bullet_item><para/>
        ///     <bullet_item>Reissue— A reissue of a dataset including all the updates applied to the original dataset up to the date of reissue will be created. A reissue does not contain information that has not been previously issued by updates.</bullet_item><para/>
        ///     <bullet_item>Cancel— When a dataset is deleted, an updated cell file is created containing only the Dataset General Information record with the Dataset Identifier (DSID) field. In this case, the Edition Number (EDTN) subfield must be set to 0.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定导出过程中要创建的文件类型。</para>
        ///   <bulletList>
        ///     <bullet_item>新数据集 - 将创建一个新数据集，其中包含以前未通过更新分发的信息。</bullet_item><para/>
        ///     <bullet_item>新版本 - 将创建数据集的新版本，其中包含以前未通过更新分发的信息。</bullet_item><para/>
        ///     <bullet_item>更新— 自上次导出以来数据集中的更改将反映在文件中。</bullet_item><para/>
        ///     <bullet_item>重新发布- 将创建数据集的重新发布，包括截至重新发布日期应用于原始数据集的所有更新。重新发布不包含以前未由更新发布的信息。</bullet_item><para/>
        ///     <bullet_item>取消 - 删除数据集时，将创建一个更新的像元文件，该文件仅包含具有数据集标识符 （DSID） 字段的数据集常规信息记录。在这种情况下，版本号 （EDTN） 子字段必须设置为 0。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Export Type")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _export_type_value? _export_type { get; set; }

        public enum _export_type_value
        {
            /// <summary>
            /// <para>New Dataset</para>
            /// <para>New Dataset— A new dataset including information that has not been previously distributed by updates will be created.</para>
            /// <para>新数据集 - 将创建一个新数据集，其中包含以前未通过更新分发的信息。</para>
            /// </summary>
            [Description("New Dataset")]
            [GPEnumValue("NEW_DATASET")]
            _NEW_DATASET,

            /// <summary>
            /// <para>New Edition</para>
            /// <para>New Edition— A new edition of a dataset including information that has not been previously distributed by updates will be created.</para>
            /// <para>新版本 - 将创建数据集的新版本，其中包含以前未通过更新分发的信息。</para>
            /// </summary>
            [Description("New Edition")]
            [GPEnumValue("NEW_EDITION")]
            _NEW_EDITION,

            /// <summary>
            /// <para>Update</para>
            /// <para>Update— Changes in a dataset since the last export will be reflected in the file.</para>
            /// <para>更新— 自上次导出以来数据集中的更改将反映在文件中。</para>
            /// </summary>
            [Description("Update")]
            [GPEnumValue("UPDATE")]
            _UPDATE,

            /// <summary>
            /// <para>Reissue</para>
            /// <para>Reissue— A reissue of a dataset including all the updates applied to the original dataset up to the date of reissue will be created. A reissue does not contain information that has not been previously issued by updates.</para>
            /// <para>重新发布- 将创建数据集的重新发布，包括截至重新发布日期应用于原始数据集的所有更新。重新发布不包含以前未由更新发布的信息。</para>
            /// </summary>
            [Description("Reissue")]
            [GPEnumValue("REISSUE")]
            _REISSUE,

            /// <summary>
            /// <para>Cancel</para>
            /// <para>Cancel— When a dataset is deleted, an updated cell file is created containing only the Dataset General Information record with the Dataset Identifier (DSID) field. In this case, the Edition Number (EDTN) subfield must be set to 0.</para>
            /// <para>取消 - 删除数据集时，将创建一个更新的像元文件，该文件仅包含具有数据集标识符 （DSID） 字段的数据集常规信息记录。在这种情况下，版本号 （EDTN） 子字段必须设置为 0。</para>
            /// </summary>
            [Description("Cancel")]
            [GPEnumValue("CANCEL")]
            _CANCEL,

        }

        /// <summary>
        /// <para>Output Location</para>
        /// <para>The location containing the output export package.</para>
        /// <para>包含输出导出包的位置。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Location")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_location { get; set; }


        /// <summary>
        /// <para>Product Configuration File</para>
        /// <para>The configuration file to use to export the product.</para>
        /// <para>用于导出产品的配置文件。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Product Configuration File")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _in_product_config { get; set; } = null;


        /// <summary>
        /// <para>Clip Features at M_CSCL</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the export process will clip data that crosses an M_CSCL feature.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Features in the source database that cross the boundary of an M_CSCL feature will be clipped to the boundary in the exported file.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Features in the source database that cross the boundary of an M_CSCL feature will not be clipped to the boundary in the exported file. This will result in the features remaining intact in the output. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定导出过程是否将裁剪穿过M_CSCL特征的数据。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 源数据库中跨越M_CSCL要素边界的要素将被裁剪到导出文件中的边界。</bullet_item><para/>
        ///     <bullet_item>未选中 - 源数据库中跨越M_CSCL要素边界的要素不会被裁剪到输出文件中的边界。这将导致要素在输出中保持不变。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Clip Features at M_CSCL")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _clip_data_option_value _clip_data_option { get; set; } = _clip_data_option_value._false;

        public enum _clip_data_option_value
        {
            /// <summary>
            /// <para>CLIP</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("CLIP")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>DO_NOT_CLIP</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DO_NOT_CLIP")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Sample Export</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the product will be exported as a sample.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—The exported cell is not stored in the ProductExports table and the metadata information will not be updated in the ProductDefinition table.</bullet_item><para/>
        ///     <bullet_item>Unchecked—The exported cell is stored in the ProductExports table as a BLOB, and the edition, update, and other metadata in the ProductDefinition table will be updated. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否将产品导出为样品。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 导出的像元不会存储在 ProductExports 表中，并且元数据信息不会在 ProductDefinition 表中更新。</bullet_item><para/>
        ///     <bullet_item>未选中 - 导出的像元将作为 BLOB 存储在 ProductExports 表中，并且将更新 ProductDefinition 表中的版本、更新和其他元数据。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Sample Export")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _sample_export_value _sample_export { get; set; } = _sample_export_value._false;

        public enum _sample_export_value
        {
            /// <summary>
            /// <para>SAMPLE_EXPORT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("SAMPLE_EXPORT")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>OFFICIAL_EXPORT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("OFFICIAL_EXPORT")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Output File</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output File")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_file { get; set; }


        /// <summary>
        /// <para>SCAMIN Configuration File</para>
        /// <para>A custom configuration file that contains the rules for calculating a feature's SCAMIN that overrides the default Radar Range SCAMIN method.</para>
        /// <para>一个自定义配置文件，其中包含用于计算要素 SCAMIN 的规则，该规则将覆盖默认的雷达范围 SCAMIN 方法。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("SCAMIN Configuration File")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _in_scamin_file { get; set; } = null;


        public ExportGeodatabaseToS57 SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}